home *** CD-ROM | disk | FTP | other *** search
/ Directorty Opus 5 - Magellan 2 / Opus 5 - Magellan 2.iso / Extras / D51_NUSource / Source / Routines / DOpus5_ARexx.s < prev    next >
Text File  |  1996-01-06  |  27KB  |  726 lines

  1. ***************************************************************************************
  2. * Directory Opus 5 ARexx Routines                              *
  3. ***************************************************************************************
  4.  
  5. ;=====================================================================================;
  6. ; Directory Opus 5 Subroutines.                                  ;
  7. ;=====================================================================================;
  8. ;DO5_GetSource    ; Get first source handle.
  9. ;DO5_GetSource_OnlyToBuffer
  10. ;DO5_GetDest    ; Get first destination handle.
  11. ;DO5_GetDest_OnlyToBuffer
  12. ;DO5_GetPath    ; Get the path of a lister.
  13. ;DO5_GetFSelDir    ; Get first selected directory in a lister.
  14. ;DO5_GetFSelEnt    ; Get first selected entry in a lister.
  15. ;DO5_SetPath    ; Set (read) a new path into a lister.
  16. ;DO5_Refesh    ; Refresh a lister.
  17. ;DO5_Select    ; (De)select a lister entry.
  18. ;DO5_NewLister    ; Open a new lister.
  19. ;DO5_ListerSet    ; Generic "Lister Set..." routine.
  20. ;DO5_Command    ; Generic "command..." routine.
  21. ;DO5_GenError    ; Error message for things which really shouldn't go wrong.
  22. ;DO5_ListerWait    ; Wait for a lister to finish what it's doing.
  23. ;DO5_DOpusFront    ; Move the DOpus screen to the front, unless "NoFront/S"
  24. ;DO5_ListClose    ; Close a lister (does "wait" first).
  25. ;    Include    ASM:Source/Routines/DOpus5_ARexx.s
  26.  
  27.  
  28.  
  29.     IFD    DO5_GetSource
  30. *= Get Source Handle =**************************************************= 9-Sep-1995 =*
  31. *  Inputs: Source_Handle(a5) - Buffer of length #Source_HandleLen.w bytes.          *
  32. *       d0 - #0 = Error message and abort if no lister.                  *
  33. *            #1 = Open a new source lister if there isn't one.              *
  34. *       Buffer2(a5) - May be used as temp storage.                      *
  35. * Outputs: Source_Handle(a5) - Contains ONE ASCII source handle.              *
  36. *   Notes: Buffer Overflow will cause program to abort.                      *
  37. *= Get Source Handle To Buffer =****************************************= 9-Sep-1995 =*
  38. *  Inputs: (a1) - Buffer to write source handle into.                      *
  39. *       d7.w - Size of buffer.                              *
  40. ***************************************************************************************
  41.     IFND    DO5_GetSource_OnlyToBuffer
  42. GetSourceHandle
  43.     Lea    Source_Handle(a5),a1
  44.     Move.w    #Source_HandleLen,d7
  45.     ENDC
  46. GetSourceHandle_ToBuffer
  47.     Movem.l    a1/d7,-(SP)            Preserve buffer/size to write into.
  48.     Lea    Get_Source_Command(pc),a1    Get string of source handle(s)
  49.     Move.l    d0,-(SP)        Preserve opennew-switch
  50.     Bsr    FillAndSendNudelRexxMsg    Send it off.
  51.     Move.l    (SP)+,d0        Restore opennew-switch
  52.  
  53.     Move.l    NudelRexxMsg(a5),a0    -.
  54.     Tst.l    rm_Result1(a0)         |- If RC != 0, "No source lister"
  55.     Bne.s    No_Source_Error        -'
  56.     Tst.l    rm_Result2(a0)        -._ Also, make sure we got a
  57.     Beq.s    No_Source_Error        -'  string in Result2.
  58.  
  59. ;;;;;;;    Note: Opus puts a space after the first handle, even if there is only one.
  60. ;;;;;;; Note: We must copy the rm_Result2 field, as it may not be modified and cannot
  61. ;;;;;;;       be used after another RexxMsg has been sent.
  62.     Move.l    rm_Result2(a0),a0    Returned string of lister handles to a0.
  63.     Move.b    #" ",d0            End copy on a space (after 1st handle).
  64.     Movem.l    (SP)+,a1/d7        Restore buffer/size to write into.
  65.     Bra    CopyChr_Null        Copy null-term until space.
  66. ;;;;;;;    RTS for us.
  67.  
  68. ;;;;;;;    Buffer_Overflow and null-termination handled automatically.
  69. ;;;;;;;    Now we have _one_ source handle, null-terminated, in Source_Handle(a5).
  70. ;-------------------------------------------------------------------------------------;
  71. No_Source_Error
  72.     Tst.l    d0
  73.     Beq.s    No_Source_Error_Error    If OpenNew switch off, send error msg.
  74.     BTst    #SF1_NewListers,STD_F_1(a5)
  75.     Beq.s    No_Source_Error_Error    If OpenNew not allowed, send error msg.
  76.  
  77.     Cmpi.l    #1,d0            -._ Internal error if didn't
  78.     Bne    Internal        -'  get either #0 or #1.
  79.  
  80.     Movem.l    (SP)+,a2/d7        Restore buffer/size to write into.
  81. ;;;;;;;    Note: Buffer pointer is in a2 now, as required, not a1.
  82.     Move.l    a2,-(SP)        Save it again.
  83.     Sub.l    a0,a0            No path.
  84.     Move.l    a0,a1            Default size.
  85.     Bsr    NewLister        Open new lister
  86.  
  87.     Move.l    (SP)+,a0        Lister Handle -> (a0).
  88.     Lea    Set_Source_SubCommand(pc),a1    "Source"
  89.     Sub.l    a2,a2            No second argument.
  90.     Bra    ListerSet        lister set source.
  91. ;;;;;;;    RTS for us.
  92. ;-------------------------------------------------------------------------------------;
  93. No_Source_Error_Error
  94.     BSet    #SF1_ErrorDop,STD_F_1(a5)    Send next error message to DOpus5-req.
  95.     Moveq    #0,d1                -._ No string returned
  96.     N_CallDOS    SetIoErr        -'  by Fault().
  97.     Bra_ErrorE    ErrAct_NoSource(pc),#0
  98. ;-------------------------------------------------------------------------------------;
  99. Get_Source_Command
  100.     Dc.b    "lister query source",0
  101. ErrAct_NoSource
  102.     Dc.b    "You must have a SOURCE lister!",0
  103.     Even
  104.     ENDC
  105.  
  106.  
  107.     IFD    DO5_GetDest
  108. *= Get Dest Handle =****************************************************= 9-Sep-1995 =*
  109. *  Inputs: Dest_Handle(a5) - Buffer of length #Dest_HandleLen.w bytes.              *
  110. *       d0 - #0 = Error message and abort if no lister.                  *
  111. *            #1 = Open a new destination lister if there isn't one.              *
  112. *       Buffer2(a5) - May be used as temp storage.                      *
  113. * Outputs: Dest_Handle(a5) - Contains ONE ASCII dest handle.                  *
  114. *   Notes: Buffer Overflow will cause program to abort.                      *
  115. *= Get Dest Handle To Buffer =******************************************= 9-Sep-1995 =*
  116. *  Inputs: (a1) - Buffer to write dest handle into.                      *
  117. *              DO NOT USE Buffer2(a5)!                          *
  118. *       d7.w - Size of buffer.                              *
  119. ***************************************************************************************
  120.     IFND    DO5_GetDest_OnlyToBuffer
  121. GetDestHandle
  122.     Lea    Dest_Handle(a5),a1
  123.     Move.w    #Dest_HandleLen,d7
  124.     ENDC
  125. GetDestHandle_ToBuffer
  126.     Movem.l    a1/d7,-(SP)            Preserve buffer/size to write into.
  127.     Lea    Get_Dest_Command(pc),a1    Get string of dest handle(s)
  128.     Move.l    d0,-(SP)        Preserve opennew-switch
  129.     Bsr    FillAndSendNudelRexxMsg    Send it off.
  130.     Move.l    (SP)+,d0        Restore opennew-switch
  131.  
  132.     Move.l    NudelRexxMsg(a5),a0    -.
  133.     Tst.l    rm_Result1(a0)         |- If RC != 0, "No dest lister"
  134.     Bne.s    No_Dest_Error        -'
  135.     Tst.l    rm_Result2(a0)        -._ Also, make sure we got a
  136.     Beq.s    No_Dest_Error        -'  string in Result2.
  137.     Move.l    rm_Result2(a0),a0    Returned string of lister handles to a0.
  138.     Move.b    #" ",d0            End copy on a space (after 1st handle).
  139.     Movem.l    (SP)+,a1/d7        Restore buffer/size to write into.
  140.     Bra    CopyChr_Null        Copy null-term until space.
  141. ;;;;;;;    RTS for us.
  142. ;-------------------------------------------------------------------------------------;
  143. No_Dest_Error
  144.     Tst.l    d0
  145.     Beq.s    No_Dest_Error_Error    If OpenNew switch off, send error msg.
  146.     BTst    #SF1_NewListers,STD_F_1(a5)
  147.     Beq.s    No_Dest_Error_Error    If OpenNew not allowed, send error msg.
  148.  
  149.     Cmpi.l    #1,d0            -._ Internal error if didn't
  150.     Bne    Internal        -'  get either #0 or #1.
  151.  
  152.     Movem.l    (SP)+,a2/d7        Restore buffer/size to write into.
  153. ;;;;;;;    Note: Buffer pointer is in a2 now, as required, not a1.
  154.     Move.l    a2,-(SP)        Save it again.
  155.     Sub.l    a0,a0            No path.
  156.     Move.l    a0,a1            Default size.
  157.     Bsr    NewLister        Open new lister
  158.  
  159.     Move.l    (SP)+,a0        Lister Handle -> (a0).
  160.     Lea    Set_Dest_SubCommand(pc),a1    "Dest"
  161.     Sub.l    a2,a2            No second argument.
  162.     Bra    ListerSet        lister set dest.
  163. ;;;;;;;    RTS for us.
  164. ;-------------------------------------------------------------------------------------;
  165. No_Dest_Error_Error
  166.     BSet    #SF1_ErrorDop,STD_F_1(a5)    Send next error message to DOpus5-req.
  167.     Moveq    #0,d1                -._ No string returned
  168.     N_CallDOS    SetIoErr        -'  by Fault().
  169.     Bra_ErrorE    ErrAct_NoDest(pc),#0
  170. ;-------------------------------------------------------------------------------------;
  171. Get_Dest_Command
  172.     Dc.b    "lister query dest",0
  173. ErrAct_NoDest
  174.     Dc.b    "You must have a DESTINATION lister!",0
  175.     Even
  176.     ENDC
  177.  
  178.  
  179.     IFD    DO5_GetPath
  180. *= Get Lister Path =***************************************************= 16-Aug-1995 =*
  181. *  Inputs: Buffer2(a5) - Temporary storage.                          *
  182. *          (a0) - Handle to get path of.                          *
  183. *          (a1) - Buffer to write path into.                          *
  184. *                 (CAN be Buffer2(a5))                              *
  185. *          d7.w - Length of (a1) buffer.                          *
  186. * Outputs: Buffer contains path string.                              *
  187. *   Notes: Buffer Overflow will cause program to abort.                      *
  188. ***************************************************************************************
  189. GetListerPath
  190.     Movem.l    a1/d7,-(SP)            Preserve final output buffer/size.
  191.  
  192.     Move.l    a0,RDF_1_Long(a5)        String ptr to data array for RawDoFmt()
  193.  
  194.     Lea    Get_Path_Command(pc),a0        Input string.
  195.     Lea    RDF_Array(a5),a1        DataArray
  196.     Lea    Buffer2(a5),a3            -._ Output
  197.     Move.l    a3,RDF_Adrs(a5)            -'  Buffer
  198.     Move.l    #Buffer2Len,RDF_Size(a5)    Size of output buffer.
  199.     Bsr    NudelRawDoFmt
  200.  
  201.     Lea    Buffer2(a5),a1        -._ Lister path
  202.     Bsr    FillAndSendNudelRexxMsg    -'  -> rm_Result2
  203.  
  204.     Move.l    NudelRexxMsg(a5),a0
  205.     Tst.l    rm_Result1(a0)
  206.     Bne.s    No_Lister_Path_Error
  207.     Tst.l    rm_Result2(a0)
  208.     Beq.s    No_Lister_Path_Error
  209.  
  210. ;;;;;;;    Must not use Buffer2(a5) from here on.
  211.     Movem.l    (SP)+,a1/d7            Restore final output buffer/size.
  212.  
  213.     Move.l    rm_Result2(a0),a0        (a0) - Lister path to be copied.
  214. ;;;;;;;    Move.l    a1,a1                Dest buffer
  215. ;;;;;;;    Move.w    d7,d7                Size of dest buffer.
  216.     Bsr    CopyCNT                Copy it, including the null.
  217.     Cmpi.w    #-1,d7                -._ Abort program on
  218.     Beq    Buffer_Overflow            -'  Buffer Overflow.
  219.     RTS
  220. ;-------------------------------------------------------------------------------------;
  221. No_Lister_Path_Error
  222.     BSet    #SF1_ErrorDop,STD_F_1(a5)    Send next error message to DOpus5-req.
  223.     Moveq    #0,d1                -._ No string returned
  224.     N_CallDOS    SetIoErr        -'  by Fault().
  225.     Bra_ErrorE    ErrAct_GetListerPath(pc),#0
  226. ;-------------------------------------------------------------------------------------;
  227. Get_Path_Command
  228.     Dc.b    "lister query %s path",0
  229. ErrAct_GetListerPath
  230.     Dc.b    "Couldn't get lister path",0
  231.     Even
  232.     ENDC
  233.  
  234.  
  235.  
  236.     IFD    DO5_GetFSelDir
  237. *= Get First Selected Directory Path =*********************************= 18-Aug-1995 =*
  238. *  Inputs: Buffer2(a5) - Temporary storage.                          *
  239. *          (a0) - Handle to get first-sel-dir from.                      *
  240. *          (a1) - Buffer to write into.                              *
  241. *                 (CAN be Buffer2(a5))                              *
  242. *          d7.w - Length of (a1) buffer.                          *
  243. * Outputs: Buffer contains dirname string (quotes stripped).                  *
  244. *   Notes: Buffer Overflow will cause program to abort.                      *
  245. ***************************************************************************************
  246. GetFirstSelDir
  247.     Movem.l    a1/d7,-(SP)            Preserve final output buffer/size.
  248.  
  249.     Move.l    a0,RDF_1_Long(a5)        String ptr to data array for RawDoFmt()
  250.  
  251.     Lea    Get_SelDirs_Command(pc),a0    Input string.
  252.     Lea    RDF_Array(a5),a1        DataArray
  253.     Lea    Buffer2(a5),a3            -._ Output
  254.     Move.l    a3,RDF_Adrs(a5)            -'  Buffer
  255.     Move.l    #Buffer2Len,RDF_Size(a5)    Size of output buffer.
  256.     Bsr    NudelRawDoFmt
  257.  
  258.     Lea    Buffer2(a5),a1        -._ List of selected dir(s)
  259.     Bsr    FillAndSendNudelRexxMsg    -'  -> rm_Result2
  260.  
  261.     Move.l    NudelRexxMsg(a5),a0
  262.     Tst.l    rm_Result1(a0)
  263.     Bne.s    No_SelDirs
  264.     Tst.l    rm_Result2(a0)
  265.     Beq.s    No_SelDirs
  266.  
  267. ;;;;;;;    Must not use Buffer2(a5) from here on.
  268.     Movem.l    (SP)+,a1/d7            Restore final output buffer/size.
  269.  
  270.     Move.l    rm_Result2(a0),a0        (a0) - Directory name(s)
  271. ;;;;;;;    Move.l    a1,a1                Dest buffer
  272. ;;;;;;;    Move.w    d7,d7                Size of dest buffer.
  273.     Cmpi.b    #'"',(a0)+            Skip past the first quote.
  274.     Bne.s    No_SelDirs            Error if no quote.
  275.     Move.b    #'"',d0            End copy at second quote.
  276.     Bra    CopyChr_Null        Copy null-term until quote.
  277. ;;;;;;;    Buffer_Overflow handled automatically.
  278. ;;;;;;;    RTS for us.
  279. ;-------------------------------------------------------------------------------------;
  280. No_SelDirs
  281.     BSet    #SF1_ErrorDop,STD_F_1(a5)    Send next error message to DOpus5-req.
  282.     Moveq    #0,d1                -._ No string returned
  283.     N_CallDOS    SetIoErr        -'  by Fault().
  284.     Bra_ErrorE    ErrAct_GetSelDirs(pc),#0
  285. ;-------------------------------------------------------------------------------------;
  286. Get_SelDirs_Command
  287.     Dc.b    "lister query %s seldirs",0
  288. ErrAct_GetSelDirs
  289.     Dc.b    "No selected directory",0
  290.     Even
  291.     ENDC
  292.  
  293.  
  294.     IFD    DO5_GetFSelEnt
  295. *= Get First Selected Entry =******************************************= 27-Aug-1995 =*
  296. *  Inputs: Buffer2(a5) - Temporary storage.                          *
  297. *          (a0) - Handle to get first-sel-entry from.                      *
  298. *          (a1) - Buffer to write into.                              *
  299. *                 (CAN be Buffer2(a5))                              *
  300. *          d7.w - Length of (a1) buffer.                          *
  301. * Outputs: Buffer contains entry-name string (quotes stripped).                  *
  302. *   Notes: Buffer Overflow will cause program to abort.                      *
  303. ***************************************************************************************
  304. GetFirstSelEntry
  305.     Movem.l    a1/d7,-(SP)            Preserve final output buffer/size.
  306.  
  307.     Move.l    a0,RDF_1_Long(a5)        String ptr to data array for RawDoFmt()
  308.  
  309.     Lea    Get_FSelEnt_Command(pc),a0    Input string.
  310.     Lea    RDF_Array(a5),a1        DataArray
  311.     Lea    Buffer2(a5),a3            -._ Output
  312.     Move.l    a3,RDF_Adrs(a5)            -'  Buffer
  313.     Move.l    #Buffer2Len,RDF_Size(a5)    Size of output buffer.
  314.     Bsr    NudelRawDoFmt
  315.  
  316.     Lea    Buffer2(a5),a1        -._ Name of FIRST selected entry
  317.     Bsr    FillAndSendNudelRexxMsg    -'  -> rm_Result2
  318.  
  319.     Move.l    NudelRexxMsg(a5),a0
  320.     Tst.l    rm_Result1(a0)
  321.     Bne.s    No_SelEnt
  322.     Tst.l    rm_Result2(a0)
  323.     Beq.s    No_SelEnt
  324.  
  325. ;;;;;;;    Must not use Buffer2(a5) from here on.
  326.     Movem.l    (SP)+,a1/d7            Restore final output buffer/size.
  327.  
  328.     Move.l    rm_Result2(a0),a0        (a0) - Entry name
  329. ;;;;;;;    Move.l    a1,a1                Dest buffer
  330. ;;;;;;;    Move.w    d7,d7                Size of dest buffer.
  331.     Cmpi.b    #'"',(a0)+            Skip past the first quote.
  332.     Bne.s    No_SelEnt            Error if no quote.
  333.     Move.b    #'"',d0            End copy at second quote.
  334.     Bra    CopyChr_Null        Copy null-term until quote.
  335. ;;;;;;;    Buffer_Overflow handled automatically.
  336. ;;;;;;;    RTS for us.
  337. ;-------------------------------------------------------------------------------------;
  338. No_SelEnt
  339.     BSet    #SF1_ErrorDop,STD_F_1(a5)    Send next error message to DOpus5-req.
  340.     Moveq    #0,d1                -._ No string returned
  341.     N_CallDOS    SetIoErr        -'  by Fault().
  342.     Bra_ErrorE    ErrAct_GetSelEnt(pc),#0
  343. ;-------------------------------------------------------------------------------------;
  344. Get_FSelEnt_Command
  345.     Dc.b    "lister query %s firstsel",0
  346. ErrAct_GetSelEnt
  347.     Dc.b    "No selected entry",0
  348.     Even
  349.     ENDC
  350.  
  351.  
  352.     IFD    DO5_SetPath
  353. *= Read Lister Path =**************************************************= 24-Sep-1995 =*
  354. *  Inputs: Buffer2(a5) - Temporary storage.                          *
  355. *       (a0) - Lister handle.                              *
  356. *       (a1) - Path to read.                                  *
  357. *        d0  - #0 = Normal, #1 = "Force" option added.                  *
  358. * Outputs: Lister reads the new path.                              *
  359. *   Notes: The path is not checked for validity, however DOpus handles this for us.   *
  360. ***************************************************************************************
  361. ReadListerPath
  362.     Move.l    a0,RDF_1_Long(a5)        Lister handle.
  363.     Move.l    a0,-(SP)            Preserve lister handle.
  364.     Move.l    a1,RDF_2_Long(a5)        Path to read.
  365.  
  366.     Move.l    d0,RDF_3_Long(a5)        Clear it, if null.
  367.     Beq.s    ReadListerPath_S1        If null, leave it cleared (no "force").
  368.     Cmpi.l    #1,d0                -._ Internal error if
  369.     Bne    Internal            -'  not #0 or #1.
  370.     Lea    Force_SubCommand(pc),a0        -._ Else, append " full"
  371.     Move.l    a0,RDF_3_Long(a5)        -'  to the command line.
  372. ReadListerPath_S1
  373.  
  374.     Lea    Set_Path_Command(pc),a0        Input string.
  375.     Lea    RDF_Array(a5),a1        DataArray
  376.     Lea    Buffer2(a5),a3            -._ Output
  377.     Move.l    a3,RDF_Adrs(a5)            -'  Buffer
  378.     Move.l    #Buffer2Len,RDF_Size(a5)    Size of output buffer.
  379.     Bsr    NudelRawDoFmt
  380.  
  381.     Lea    Buffer2(a5),a1        -._ Read in the
  382.     Bsr    FillAndSendNudelRexxMsg    -'  new path.
  383.  
  384.     Move.l    NudelRexxMsg(a5),a0
  385.     Tst.l    rm_Result1(a0)
  386.     Bne    General_DOpus_Error
  387.  
  388.     Move.l    (SP)+,a0            Restore lister handle.
  389.     Bra    ListerWait            Wait for lister to read the path in.
  390. ;;;;;;;    RTS for us.
  391. ;-------------------------------------------------------------------------------------;
  392. Set_Path_Command
  393.     Dc.b    "lister read %s '%s'%s",0
  394. Force_SubCommand
  395.     Dc.b    " force",0
  396.     Even
  397.     ENDC
  398.  
  399.  
  400.     IFD    DO5_Refesh
  401. *= Lister Refresh =****************************************************= 24-Sep-1995 =*
  402. *  Inputs: Buffer2(a5) - Temporary storage.                          *
  403. *       (a0) - Lister handle.                              *
  404. *        d0  - #0 = Normal refresh,  #1 = "full" refresh                  *
  405. * Outputs: Lister is refreshed.                                  *
  406. *   Notes:                                           *
  407. ***************************************************************************************
  408. ListerRefresh
  409.     Move.l    a0,RDF_1_Long(a5)        Lister handle.
  410.  
  411.     Move.l    d0,RDF_2_Long(a5)        Clear it, if null.
  412.     Beq.s    ListerRefresh_S1        If null, leave it cleared (no "full").
  413.     Cmpi.l    #1,d0                -._ Internal error if
  414.     Bne    Internal            -'  not #0 or #1.
  415.     Lea    Full_SubCommand(pc),a0        -._ Else, append " full"
  416.     Move.l    a0,RDF_2_Long(a5)        -'  to the command line.
  417. ListerRefresh_S1
  418.  
  419.     Lea    Lister_Refresh_Command(pc),a0    Input string.
  420.     Lea    RDF_Array(a5),a1        DataArray
  421.     Lea    Buffer2(a5),a3            -._ Output
  422.     Move.l    a3,RDF_Adrs(a5)            -'  Buffer
  423.     Move.l    #Buffer2Len,RDF_Size(a5)    Size of output buffer.
  424.     Bsr    NudelRawDoFmt
  425.  
  426.     Lea    Buffer2(a5),a1            -._ Refresh
  427.     Bsr    FillAndSendNudelRexxMsg        -'  the lister.
  428.  
  429.     Move.l    NudelRexxMsg(a5),a0
  430.     Tst.l    rm_Result1(a0)
  431.     Bne    General_DOpus_Error
  432.     RTS
  433. ;-------------------------------------------------------------------------------------;
  434. Lister_Refresh_Command
  435.     Dc.b    "lister refresh %s%s",0
  436. Full_SubCommand
  437.     Dc.b    " full",0
  438.     Even
  439.     ENDC
  440.  
  441.  
  442.  
  443.     IFD    DO5_Select
  444. *= Lister Select =*****************************************************= 18-Aug-1995 =*
  445. *  Inputs: Buffer2(a5) - Temporary storage.                          *
  446. *       (a0) - Lister handle.                              *
  447. *       (a1) - Name of entry to (de)select.                              *
  448. *        d0  - #0 = deselect, #1 = select.                          *
  449. * Outputs: Entry is (de)selected.                              *
  450. *   Notes: Lister my be refreshed to display the changes.                  *
  451. ***************************************************************************************
  452. ListerSelect
  453.     Move.l    a0,RDF_1_Long(a5)        Lister handle.
  454.     Move.l    a1,RDF_2_Long(a5)        Entry name.
  455.     Move.l    d0,RDF_3_Long(a5)        Select/Deselect.
  456.  
  457.     Lea    Lister_Select_Command(pc),a0    Input string.
  458.     Lea    RDF_Array(a5),a1        DataArray
  459.     Lea    Buffer2(a5),a3            -._ Output
  460.     Move.l    a3,RDF_Adrs(a5)            -'  Buffer
  461.     Move.l    #Buffer2Len,RDF_Size(a5)    Size of output buffer.
  462.     Bsr    NudelRawDoFmt
  463.  
  464.     Lea    Buffer2(a5),a1        -._ (De)Select
  465.     Bsr    FillAndSendNudelRexxMsg    -'  the entry.
  466.  
  467.     Move.l    NudelRexxMsg(a5),a0
  468.     Tst.l    rm_Result1(a0)
  469.     Bne    General_DOpus_Error
  470.     RTS
  471. ;-------------------------------------------------------------------------------------;
  472. Lister_Select_Command
  473.     Dc.b    "lister select %s %s %ld",0
  474.     Even
  475.     ENDC
  476.  
  477.  
  478.     IFD    DO5_NewLister
  479. *= New Lister =********************************************************= 18-Aug-1995 =*
  480. *  Inputs: NoFront_S(a5) - ReadArgs() switch, if on DOpus5 screen not moved to front. *
  481. *       Buffer2(a5) - Temporary storage.                          *
  482. *        a0  - Pointer to Path to read, or NULL.                      *
  483. *        a1  - Pointer to Dimensions string, or NULL.                  *
  484. *        a2  - Pointer to Buffer to write new handle to, or NULL.              *
  485. *       d7.w - Length of d2-Buffer, if a2 not NULL.                      *
  486. * Outputs: A new lister is created and it's handle written out to (a2).              *
  487. ***************************************************************************************
  488. NewLister
  489.     Movem.l    a2/d7,-(SP)            Preserve buffer to write new handle to.
  490.     Movem.l    a0/a1,-(SP)            Preserve Dimenstions/Path string ptrs.
  491.  
  492.     Bsr    DOpusFront            Move DOpus screen to front.
  493.  
  494.     Movem.l    (SP)+,a0/a1            Restore Dimenstions/Path string ptrs.
  495.  
  496.     Move.l    a1,RDF_1_Long(a5)        Dimensions string, or null.
  497. ;;;;;;;    Note: If they didn't give it, nothing will be input here (valid).
  498.     Move.l    a0,RDF_2_Long(a5)        Path string, or null.
  499. ;;;;;;;    Note: If they didn't give it, nothing will be input here (valid).
  500.     Lea    Lister_New_Command(pc),a0    Input string.
  501.     Lea    RDF_Array(a5),a1        DataArray
  502.     Lea    Buffer2(a5),a3            -._ Output
  503.     Move.l    a3,RDF_Adrs(a5)            -'  Buffer
  504.     Move.l    #Buffer2Len,RDF_Size(a5)    Size of output buffer.
  505.     Bsr    NudelRawDoFmt
  506.  
  507.     Lea    Buffer2(a5),a1        -._ Open the new lister.
  508.     Bsr    FillAndSendNudelRexxMsg    -'  New-handle -> rm_Result2
  509.  
  510.     Move.l    NudelRexxMsg(a5),a0
  511.     Tst.l    rm_Result1(a0)
  512.     Bne.s    No_NewLister
  513.     Tst.l    rm_Result2(a0)
  514.     Beq.s    No_NewLister
  515. ;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
  516.     Movem.l    (SP)+,a2/d7            Restore buffer to write new handle to.
  517.  
  518.     Move.l    a2,d0                -._ If null, don't
  519.     Tst.l    d0                (Just in case)
  520.     Beq.s    NewLister_Skip_HandleStore    -'  store the handle.
  521.  
  522.     Move.l    NudelRexxMsg(a5),a0        -._ Copy the
  523.     Move.l    rm_Result2(a0),a0        -'  new handle...
  524.     Move.l    a2,a1                ...to where they asked...
  525. ;;;;;;;    Move.w    d7,d7                ...which is this long.
  526.     Bsr    CopyCNT                -.
  527.     Cmpi.w    #-1,d7                 |- Store the handle.
  528.     Beq    Buffer_Overflow            -'
  529. NewLister_Skip_HandleStore
  530.  
  531.     Move.l    NudelRexxMsg(a5),a0        -._ New lister's
  532.     Move.l    rm_Result2(a0),a0        -'  handle...
  533.     Bra    ListerWait            Wait for new lister to be ready.
  534. ;;;;;;;    RTS for us.
  535. ;-------------------------------------------------------------------------------------;
  536. No_NewLister
  537.     BSet    #SF1_ErrorDop,STD_F_1(a5)    Send next error message to DOpus5-req.
  538.     Moveq    #0,d1                -._ No string returned
  539.     N_CallDOS    SetIoErr        -'  by Fault().
  540.     Bra_ErrorE    ErrAct_NewLister(pc),#0
  541.  
  542. Lister_New_Command
  543.     Dc.b    'lister new %s %s',0
  544. ErrAct_NewLister
  545.     Dc.b    "Could not open a new lister",0
  546.     Even
  547.     ENDC
  548.  
  549.  
  550.     IFD    DO5_ListerSet
  551. *= Lister Set =********************************************************= 18-Aug-1995 =*
  552. *  Inputs: (a0) - Lister handle.                              *
  553. *        a1  - Pointer to first command word, or NULL.                  *
  554. *        a2  - Pointer to second command word, or NULL.                  *
  555. * Outputs: None.                                      *
  556. ***************************************************************************************
  557. ListerSet
  558.     Move.l    a0,RDF_1_Long(a5)        Lister handle.
  559.     Move.l    a1,RDF_2_Long(a5)        1st command word, or NULL.
  560.     Move.l    a2,RDF_3_Long(a5)        2nd command word, or NULL.
  561.  
  562.     Lea    Lister_Set_Command(pc),a0    Input string.
  563.     Lea    RDF_Array(a5),a1        DataArray
  564.     Lea    Buffer2(a5),a3            -._ Output
  565.     Move.l    a3,RDF_Adrs(a5)            -'  Buffer
  566.     Move.l    #Buffer2Len,RDF_Size(a5)    Size of output buffer.
  567.     Bsr    NudelRawDoFmt
  568.  
  569.     Lea    Buffer2(a5),a1            -._ Do the set
  570.     Bsr    FillAndSendNudelRexxMsg        -'  command.
  571.  
  572.     Move.l    NudelRexxMsg(a5),a0
  573.     Tst.l    rm_Result1(a0)
  574.     Bne.s    General_DOpus_Error
  575.     RTS
  576. ;-------------------------------------------------------------------------------------;
  577. Lister_Set_Command
  578.     Dc.b    'lister set %s %s %s',0
  579. Set_Dest_SubCommand
  580.     Dc.b    'dest',0
  581. Set_Source_SubCommand
  582.     Dc.b    'source',0
  583. Set_Lock_SubCommand
  584.     Dc.b    'lock',0
  585.     Even
  586.     ENDC
  587.  
  588.  
  589.     IFD    DO5_Command
  590. *= Command =***********************************************************= 27-Dec-1995 =*
  591. *  Inputs: (a0) - Lister handle (MUST BE GIVEN! But is not used).              *
  592. *        a1  - Pointer to first command word, or NULL.                  *
  593. *        a2  - Pointer to second command word, or NULL.                  *
  594. * Outputs: None.                                      *
  595. ***************************************************************************************
  596. ListerCommand
  597.     Sub.l    a0,a0
  598.     Move.l    a1,RDF_1_Long(a5)        1st command word, or NULL.
  599.     Move.l    a2,RDF_2_Long(a5)        2nd command word, or NULL.
  600.  
  601.     Lea    Command_Command(pc),a0        Input string.
  602.     Lea    RDF_Array(a5),a1        DataArray
  603.     Lea    Buffer2(a5),a3            -._ Output
  604.     Move.l    a3,RDF_Adrs(a5)            -'  Buffer
  605.     Move.l    #Buffer2Len,RDF_Size(a5)    Size of output buffer.
  606.     Bsr    NudelRawDoFmt
  607.  
  608.     Lea    Buffer2(a5),a1            -._ Do the set
  609.     Bsr    FillAndSendNudelRexxMsg        -'  command.
  610.  
  611.     Move.l    NudelRexxMsg(a5),a0
  612.     Tst.l    rm_Result1(a0)
  613.     Bne.s    General_DOpus_Error
  614.     RTS
  615. ;-------------------------------------------------------------------------------------;
  616. Command_Command
  617.     Dc.b    'command %s %s',0
  618.     Even
  619.     ENDC
  620.  
  621.  
  622.     IFD    DO5_GenError
  623. *= General DOpus Error ************************************************= 18-Aug-1995 =*
  624. *   Notes: This is intended to catch errors which should only occur if the user does  *
  625. *       something stupid like closes the lister half-way through an operation.     *
  626. *       In these cases it isn't worth wasting space with an error message          *
  627. *       describing exactly what was going on.                      *
  628. ***************************************************************************************
  629. General_DOpus_Error
  630.     BSet    #SF1_ErrorDop,STD_F_1(a5)    Send next error message to DOpus5-req.
  631.     Moveq    #0,d1                -._ No string returned
  632.     N_CallDOS    SetIoErr        -'  by Fault().
  633.     Bra_ErrorE    ErrAct_DOpus_General(pc),#0
  634.  
  635. ErrAct_DOpus_General
  636.     Dc.b    "Something failed which shouldn't have:",10
  637.     Dc.b    "You're either low on memory or playing with the listers",10
  638.     Dc.b    "(or there is a bug in "
  639.     PROGNAM
  640.     Dc.b    ")",0
  641.     Even
  642.     ENDC
  643.  
  644.  
  645.     IFD    DO5_ListerWait
  646. *= Lister Wait =*******************************************************= 19-Aug-1995 =*
  647. *  Inputs: (a0) - Lister handle.                              *
  648. * Outputs: Waits for lister to become non-busy.                          *
  649. *   Notes: If non-busy to start with, waits up to two seconds for it to become busy.  *
  650. ***************************************************************************************
  651. ListerWait
  652.     Move.l    a0,RDF_1_Long(a5)
  653.  
  654.     Lea    Lister_Wait_Command(pc),a0    Input string.
  655.     Lea    RDF_Array(a5),a1        DataArray
  656.     Lea    Buffer2(a5),a3            -._ Output
  657.     Move.l    a3,RDF_Adrs(a5)            -'  Buffer
  658.     Move.l    #Buffer2Len,RDF_Size(a5)    Size of output buffer.
  659.     Bsr    NudelRawDoFmt
  660.  
  661.     Lea    Buffer2(a5),a1            -._ Copy the
  662.     Bsr    FillAndSendNudelRexxMsg        -'  lister.
  663.  
  664.     Move.l    NudelRexxMsg(a5),a0
  665.     Tst.l    rm_Result1(a0)
  666.     Bne    General_DOpus_Error
  667.     RTS
  668. ;-------------------------------------------------------------------------------------;
  669. Lister_Wait_Command
  670.     Dc.b    'lister wait %s',0
  671.     Even
  672.     ENDC
  673.  
  674.  
  675.     IFD    DO5_DOpusFront
  676. *= DOpus Front =*******************************************************= 19-Aug-1995 =*
  677. *  Inputs: NoFront_S(a5) - If set, routine is skipped.                      *
  678. * Outputs: DOpus screen moved to front.                              *
  679. ***************************************************************************************
  680. DOpusFront
  681.     Tst.l    NoFront_S(a5)            -._ If they asked for the screen
  682.     Bne.s    NewLister_NoFront        -'  to be left, leave it alone.
  683.     Lea    Dopus_Front_Command(pc),a1    -._ Else, pop
  684.     Bsr    FillAndSendNudelRexxMsg        -'  it to front.
  685. ;;;;;;;    Note: Dopus_Front_Command is part of the System.s/Error routine.
  686.     Move.l    NudelRexxMsg(a5),a0
  687.     Tst.l    rm_Result1(a0)
  688.     Bne    General_DOpus_Error
  689. NewLister_NoFront
  690.     RTS
  691.     ENDC
  692.  
  693.  
  694.     IFD    DO5_ListClose
  695. *= Lister Close =******************************************************= 27-Dec-1995 =*
  696. *  Inputs: (a0) - Lister handle.                              *
  697. * Outputs: Waits for lister to become non-busy and then closes it.              *
  698. *   Notes: If non-busy to start with, waits up to two seconds for it to become busy.  *
  699. ***************************************************************************************
  700. ListerClose
  701.     Move.l    a0,-(SP)        Preserve lister handle.
  702.     Bsr.s    ListerWait        Wait for lister to become non-busy.
  703.     Move.l    (SP)+,a0        Restore lister handle.
  704.  
  705.     Move.l    a0,RDF_1_Long(a5)    Lister handle for RawDoFmt()
  706.  
  707.     Lea    Lister_Close_Command(pc),a0    Input string.
  708.     Lea    RDF_Array(a5),a1        DataArray
  709.     Lea    Buffer2(a5),a3            -._ Output
  710.     Move.l    a3,RDF_Adrs(a5)            -'  Buffer
  711.     Move.l    #Buffer2Len,RDF_Size(a5)    Size of output buffer.
  712.     Bsr    NudelRawDoFmt
  713.  
  714.     Lea    Buffer2(a5),a1            -._ Copy the
  715.     Bsr    FillAndSendNudelRexxMsg        -'  lister.
  716.  
  717.     Move.l    NudelRexxMsg(a5),a0
  718.     Tst.l    rm_Result1(a0)
  719.     Bne    General_DOpus_Error
  720.     RTS
  721. ;-------------------------------------------------------------------------------------;
  722. Lister_Close_Command
  723.     Dc.b    'lister close %s',0
  724.     Even
  725.     ENDC
  726.